package com.wyw.learning.thread.threadlocal;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 使用线程池，1000个线程打印日期
 *
 * @author Mr Wu    yewen.wu.china@gmail.com
 * @date 2021/7/6   9:49 下午
 * <p>
 * Update History:
 * Author        Time            Content
 */
public class ThreadLocalNormalUsage02 {
    public static ExecutorService threadpool = Executors.newFixedThreadPool(10);
    public static void main(String[] args) {
        for(int i =0; i < 1000; i ++){
            int finalI = i;
            /*
                execute与submit的区别
                1、类型
                    execute只能接收Runnable类型的任务
                    submit不管是Runnable还是Callable类型的任务都可以接受，但是Runnable返回值均为null，所以使用Future的get90获得的还是null
                2、返回值
                    由Callable和Runnable类型的区别克制
                    execute没有返回值，submit有返回值，所以需要返回值的时候必须使用submit
                3、异常情况
                    execute：execute中是Runnable接口实现的，所以只能使用try、catch进行捕获CheckedException，通过实现UncaughtExceptionHande接口处理UncheckedException
                    submit：不管提交的是Runnable还是Callable类型的任务，如果不对返回值Future调用get()方法，都会吃掉异常。
             */
            threadpool.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println(new ThreadLocalNormalUsage00().date(finalI));
                }
            });
        }
        threadpool.shutdown();
    }

    public String date(int seconds){
        Date date = new Date(1000 * seconds);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(date);
    }
}
